AWS CDK で Lambda 関数の再起ループ保護が設定可能になっていました
こんにちは、製造ビジネステクノロジー部の若槻です。
AWS CDK の最新のリリースで、下記のアップデートが追加されていました。
lambda: support Recursive Loop Protection property (572fe0a)
「Recursive Loop Protection」は再起ループ保護のことで、機能自体は昨年に実装されたものですが、このたびのアップデートにより Lambda 関数の L2 Construct でも設定が可能となりました。
ちなみに既定値は 停止 なので、保護を解除する必要がなければ本設定を行う必要はありません。
試してみた
CDK モジュールのアップデート
AWS CDK モジュールを v2.153.0 以上にアップデートします。
npm i aws-cdk-lib@latest aws-cdk@latest
これにより Function Construct クラスで recursiveLoop
プロパティが利用可能となります。
CDK で再起ループ保護を設定する
それでは CDK で再起ループ保護を設定してみます。ここではNodejsFunction Construct クラスで試してみます。このクラスも Function Construct をベースにしているので recursiveLoop
プロパティが利用可能です。
RecursiveLoop.TERMINATE
を設定すると再起ループ検出時の動作が「停止」となります。これは既定値となります。
import { aws_lambda_nodejs, aws_lambda, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSampleStack extends Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
new aws_lambda_nodejs.NodejsFunction(this, 'MyFunction', {
runtime: aws_lambda.Runtime.NODEJS_20_X,
recursiveLoop: aws_lambda.RecursiveLoop.TERMINATE, // 再起ループを停止
});
}
}
上記を CDK デプロイしてマネジメントコンソールから関数の設定を確認すると、再起ループ保護(Recursive loop detection)の設定が Terminate recursive loops
、つまり「停止」となっていることが確認できました。
次に、再起ループを「許可」してみます。その場合は RecursiveLoop.ALLOW
を設定します。
import { aws_lambda_nodejs, aws_lambda, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class CdkSampleStack extends Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
new aws_lambda_nodejs.NodejsFunction(this, 'MyFunction', {
runtime: aws_lambda.Runtime.NODEJS_20_X,
recursiveLoop: aws_lambda.RecursiveLoop.ALLOW, // 再起ループを許可
});
}
}
デプロイした上で再度設定を確認してみると、Allow recursive loops
、つまり再起ループ保護が「許可」となっていることが確認できました。
おわりに
AWS CDK で Lambda 関数の再起ループ保護が設定可能になっていたので共有しました。
これにより再起ループ保護を簡単に許可できるようになりました、と言いたいところですが、Lamnda 関数の再起ループによる利用は AWS アカウントに予期しない料金が請求される可能性があるため、そもそも推奨されていません。どうしても必要な場合を除いて recursiveLoop
プロパティはいじらないようにした方が賢明です。
以上